package com.whfc.emp.service;

import com.whfc.common.exception.BizException;
import com.whfc.common.result.ListData;
import com.whfc.common.result.PageData;
import com.whfc.emp.dto.*;
import com.whfc.emp.dto.openapi.OpenApiEmpWarnDTO;
import com.whfc.emp.param.*;
import com.whfc.entity.dto.msg.AppWarnMsgRecDTO;

import java.util.Date;
import java.util.List;

/**
 * @ClasssName AppEmpWarnService
 * @Description 人员报警设置
 * @Author hw
 * @Date 2021/1/5 10:48
 * @Version 1.0
 */
public interface AppEmpWarnService {

    /**
     * 人员报警规则列表
     *
     * @param deptId
     * @param pageNum
     * @param pageSize
     * @param keyword
     * @param ruleType
     * @param enableFlag
     * @param warnType
     * @return
     */
    PageData<AppWarnRuleDTO> settingList(Integer deptId, Integer pageNum, Integer pageSize, String keyword, Integer ruleType, Integer enableFlag, Integer warnType) throws BizException;


    /**
     * 人员报警设置报警时间
     *
     * @param request
     */
    void setTime(AppWarnSetTimeParam request) throws BizException;

    /**
     * 人员报警信息接收人及接收方式
     *
     * @param ruleId
     * @return
     */
    AppWarnMsgRecDTO userList(Integer ruleId) throws BizException;

    /**
     * 人员报警设置报警接收人
     *
     * @param request
     */
    void setUser(AppWarnEmpSetUserParam request) throws BizException;

    /**
     * 人员报警记录列表
     *
     * @param deptId
     * @param pageNum
     * @param pageSize
     * @param state
     * @param ruleType
     * @param startTime
     * @param endTime
     * @return
     */
    PageData<AppWarnEmpRecordDTO> recordList(Integer deptId, Integer pageNum, Integer pageSize, Integer state, Integer ruleType, Date startTime, Date endTime) throws BizException;

    /**
     * 人员报警详情
     *
     * @param warnId
     * @return
     */
    AppWarnEmpRecordDetailDTO recordDetail(Integer warnId) throws BizException;

    /**
     * 处理人员报警
     *
     * @param userId
     * @param userName
     * @param phone
     * @param request
     */
    void handle(Integer userId, String userName, String phone, AppWarnHandleParam request) throws BizException;

    /**
     * 批量处理报警记录
     *
     * @param param
     * @throws BizException
     */
    void batchHandle(WarnBatchHandleParam param) throws BizException;

    /**
     * 批量删除人员报警记录
     *
     * @param param
     * @throws BizException
     */
    void del(WarnBatchDelParam param) throws BizException;

    /**
     * 查询时间内报警数
     *
     * @param deptIds
     * @param startTime
     * @param endTime
     * @return
     */
    Integer getWarnNum(List<Integer> deptIds, Date startTime, Date endTime) throws BizException;


    /**
     * 获取人员报警记录列表
     *
     * @param deptId
     * @param pageNum
     * @param pageSize
     * @param handleState
     * @return
     */
    PageData<AppWarnEmpRecordDTO> empWarnList(Integer deptId, Integer pageNum, Integer pageSize, Integer handleState) throws BizException;

    /**
     * 开放平台获取人员报警列表
     *
     * @param empId 人员ID
     * @param date  日期
     * @return 报警列表
     */
    List<OpenApiEmpWarnDTO> getOpenApiEmpWarnList(Integer empId, Date date) throws BizException;


    /**
     * 人员报警数量
     *
     * @param deptId
     * @param state
     * @param startTime
     * @param endTime
     * @return
     */
    AppWarnEmpRecordNumDTO empWarnNum(Integer deptId, Integer state, Date startTime, Date endTime);

    /**
     * 启用/禁用
     *
     * @param request
     * @throws BizException
     */
    void enable(AppEmpWarnEnableParam request) throws BizException;

    /**
     * 添加人员报警规则
     *
     * @param param
     * @throws BizException
     */
    void settingAdd(AppEmpWarnAddParam param) throws BizException;

    /**
     * 编辑人员报警规则
     *
     * @param param
     * @throws BizException
     */
    void settingEdit(AppEmpWarnEditParam param) throws BizException;

    /**
     * 删除人员报警规则
     *
     * @param ruleId
     * @throws BizException
     */
    void settingDel(Integer ruleId) throws BizException;

    /**
     * 查询报警对象
     *
     * @param ruleId
     * @param empName
     * @return
     * @throws BizException
     */
    ListData<AppEmpDTO> objectList(Integer ruleId, String empName) throws BizException;

    /**
     * 查询可供选择的报警人员
     *
     * @param ruleId
     * @param empName
     * @return
     * @throws BizException
     */
    ListData<AppEmpDTO> getAllObject(Integer ruleId, String empName) throws BizException;

    /**
     * 添加报警人员
     *
     * @param param
     * @throws BizException
     */
    void objectAdd(EmpWarnObjectAddParam param) throws BizException;

    List<AppWarnEmpRecordDTO> getNewList(Integer deptId);
}
